﻿Imports DevExpress.XtraEditors.Controls
Imports DevExpress.XtraPrinting
Imports Control_Vuelos_BE
Imports Control_Vuelos_BL
Imports System.Text.RegularExpressions

Public Class frmAdm_ProgramaViaje
    Inherits frmBaseMantenimiento
    Public printingSystem1 As New PrintingSystem()
    Public printableComponentLink1 As New PrintableComponentLink()
    ReadOnly vMaestrosBL As New MaestrosBL()
    ReadOnly vProViaBL As New ProgramaViajeBL()
    Dim vProViaBE As New V_ProgramaViajeBE
    Dim tbAerol, tbRuta, tbEstado, tbContratante, tbTipo As New DataTable
    Dim nopc As Integer = 0

    Private Sub frmAdm_ProgramaViaje_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        AddHandler BarBtnAgregar.ItemClick, AddressOf RegistroNuevo
        AddHandler BarBtnModificar.ItemClick, AddressOf RegistroModificar
        AddHandler BarBtnEliminar.ItemClick, AddressOf RegistroDardeBaja
        AddHandler BarBtnGrabar.ItemClick, AddressOf RegistroGrabar
        AddHandler BarBtnCancelar.ItemClick, AddressOf RegistroCancelar
        AddHandler BarBtnRefresh.ItemClick, AddressOf CargarLista
        AddHandler BarBtnImprimir.ItemClick, AddressOf Imprimir
        AddHandler UcViaje1.cboCiaAviacion.LostFocus, AddressOf cmdclickCiaAviacion
        AddHandler UcViaje1.cboTipoVuelo.LostFocus, AddressOf cmdclickTipoVuelo
        AddHandler UcViaje1.cboOrigen.LostFocus, AddressOf CrearCodigo
        AddHandler UcViaje1.GridView1.FocusedRowChanged, AddressOf CambioRegistro

        printingSystem1.Links.AddRange(New Object() {printableComponentLink1})
        printableComponentLink1.Component = UcViaje1.GridControl1
        printableComponentLink1.Landscape = True

        InicializarBoton(False)
        CargarCombos()
        EstadoCajas(True)
        CargarLista()
        SLTitulo.Text = "Mantenimiento de Vuelos"
    End Sub


#Region "Inicializacion"

    Private Sub CargarCombos()
        ' cargo el contratante del vuelo
        tbContratante = vMaestrosBL.Get_Contratante()
        UcViaje1.cboContratante.Properties.DataSource = tbContratante
        UcViaje1.cboContratante.Properties.DisplayMember = "desContrataViaje"
        UcViaje1.cboContratante.Properties.ValueMember = "codContrataViaje"
        UcViaje1.cboContratante.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("codContrataViaje", 20, "Tipo"))
        UcViaje1.cboContratante.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("desContrataViaje", 100, "Descripción"))
        UcViaje1.cboContratante.Properties.BestFit()
        UcViaje1.cboContratante.Properties.PopupWidth = 300
        UcViaje1.cboContratante.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboContratante.Properties.AutoSearchColumnIndex = 1
        ' Origen/Destino
        tbRuta = vMaestrosBL.Get_RutaVuelo("")
        UcViaje1.cboOrigen.Properties.DataSource = tbRuta
        UcViaje1.cboOrigen.Properties.DisplayMember = "descripcion"
        UcViaje1.cboOrigen.Properties.ValueMember = "codigo"
        UcViaje1.cboOrigen.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("codigo", 50, "Origen/Destino"))
        UcViaje1.cboOrigen.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("descripcion", 200, "Descripción"))
        UcViaje1.cboOrigen.Properties.BestFit()
        UcViaje1.cboOrigen.Properties.PopupWidth = 300
        UcViaje1.cboOrigen.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboOrigen.Properties.AutoSearchColumnIndex = 1
        ' Cia de aviacion
        tbAerol = vMaestrosBL.Get_Aerolinea()
        UcViaje1.cboCiaAviacion.Properties.DataSource = tbAerol
        UcViaje1.cboCiaAviacion.Properties.DisplayMember = "NomEmpresa"
        UcViaje1.cboCiaAviacion.Properties.ValueMember = "CodEmpresa"
        UcViaje1.cboCiaAviacion.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("CodEmpresa", 20, "Aerolinea"))
        UcViaje1.cboCiaAviacion.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("NomEmpresa", 100, "Descripción"))
        UcViaje1.cboCiaAviacion.Properties.BestFit()
        UcViaje1.cboCiaAviacion.Properties.PopupWidth = 300
        UcViaje1.cboCiaAviacion.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboCiaAviacion.Properties.AutoSearchColumnIndex = 1
        ' Tipo de vuelo
        tbTipo = vMaestrosBL.Get_TipoVuelo("001")
        UcViaje1.cboTipoVuelo.Properties.DataSource = tbTipo
        UcViaje1.cboTipoVuelo.Properties.DisplayMember = "NomTipo"
        UcViaje1.cboTipoVuelo.Properties.ValueMember = "CodTipo"
        UcViaje1.cboTipoVuelo.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("CodTipo", 20, "Tipo"))
        UcViaje1.cboTipoVuelo.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("NomTipo", 100, "Descripción"))
        UcViaje1.cboTipoVuelo.Properties.BestFit()
        UcViaje1.cboTipoVuelo.Properties.PopupWidth = 300
        UcViaje1.cboTipoVuelo.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboTipoVuelo.Properties.AutoSearchColumnIndex = 1
        ' cargo el estado
        tbEstado = vMaestrosBL.Get_EstadoVuelo()
        UcViaje1.cboEstado.Properties.DataSource = tbEstado
        UcViaje1.cboEstado.Properties.DisplayMember = "desEstadoVuelo"
        UcViaje1.cboEstado.Properties.ValueMember = "codEstadoVuelo"
        UcViaje1.cboEstado.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("codEstadoVuelo", 15, "Estado"))
        UcViaje1.cboEstado.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("desEstadoVuelo", 60, "Descripcion"))
        UcViaje1.cboEstado.Properties.BestFit()
        UcViaje1.cboEstado.Properties.PopupWidth = 120
        UcViaje1.cboEstado.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboEstado.Properties.AutoSearchColumnIndex = 1
    End Sub

    Private Sub CargarLista()
        ' cargo la grilla con el detalle
        UcViaje1.GridControl1.DataSource = vProViaBL.ListarProgramaViaje("")
    End Sub

    Private Sub CambioRegistro()
        If UcViaje1.GridView1.RowCount > 0 Then
            Dim Rows As New ArrayList()
            Rows.Add(UcViaje1.GridView1.GetDataRow(UcViaje1.GridView1.GetSelectedRows()(0)))
            Dim Row As DataRow = CType(Rows(0), DataRow)
            If Not Row Is Nothing Then
                CargarCajas(Row("codViaje").ToString())
            End If
        Else
            LimpiarCajas()
        End If
    End Sub

    Private Sub Imprimir()
        printableComponentLink1.ShowPreview()
    End Sub

    Private Sub EstadoCajas(ByVal lFlag As Boolean)
        UcViaje1.cboContratante.Properties.ReadOnly = lFlag
        UcViaje1.txtCodViaje.Properties.ReadOnly = True
        UcViaje1.cboFchViaje.Properties.ReadOnly = lFlag
        UcViaje1.cboOrigen.Properties.ReadOnly = lFlag
        UcViaje1.cboCiaAviacion.Properties.ReadOnly = lFlag
        UcViaje1.cboTipoVuelo.Properties.ReadOnly = lFlag
        UcViaje1.txtNroCupos.Properties.ReadOnly = lFlag
        UcViaje1.txtPsoMaxViaje.Properties.ReadOnly = lFlag
        UcViaje1.txtObservacion.Properties.ReadOnly = lFlag
        UcViaje1.cboEstado.Properties.ReadOnly = lFlag
    End Sub

    Private Sub LimpiarCajas()
        UcViaje1.cboContratante.EditValue = ""
        UcViaje1.txtCodViaje.Text = ""
        UcViaje1.cboFchViaje.Text = Date.Today
        UcViaje1.cboOrigen.EditValue = ""
        UcViaje1.cboCiaAviacion.EditValue = ""
        UcViaje1.cboTipoVuelo.EditValue = ""
        UcViaje1.txtNroCupos.Text = ""
        UcViaje1.txtPsoMaxViaje.Text = ""
        UcViaje1.txtObservacion.Text = ""
        UcViaje1.cboEstado.EditValue = "1"
    End Sub

    Private Sub CargarCajas(ByVal pCod As String)
        vProViaBE = vProViaBL.TraerProgramaViaje(pCod)
        UcViaje1.cboContratante.EditValue = vProViaBE.CodContrataViaje.Trim
        UcViaje1.txtCodViaje.Text = vProViaBE.CodViaje
        UcViaje1.cboFchViaje.Text = vProViaBE.FchViaje
        UcViaje1.cboOrigen.EditValue = vProViaBE.CodLugarOrigen.Trim & vProViaBE.CodLugarDestino.Trim
        UcViaje1.cboCiaAviacion.EditValue = vProViaBE.CodEmpresa.Trim
        UcViaje1.cboTipoVuelo.EditValue = vProViaBE.CodTipoVuelo.Trim
        UcViaje1.txtNroCupos.Text = vProViaBE.NroCupos
        UcViaje1.txtPsoMaxViaje.Text = vProViaBE.PsoMaxViaje
        UcViaje1.txtObservacion.Text = vProViaBE.ObsViaje
        UcViaje1.cboEstado.EditValue = vProViaBE.EstadoViaje
    End Sub

    Private Sub InicializarBoton(ByVal lFlag As Boolean)
        BarBtnAgregar.Enabled = Not lFlag
        BarBtnModificar.Enabled = Not lFlag
        BarBtnEliminar.Enabled = Not lFlag
        BarBtnRefresh.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
        BarBtnCancelar.Enabled = lFlag
        BarBtnGrabar.Enabled = lFlag
    End Sub

    Private Sub cmdclickCiaAviacion(ByVal sender As Object, ByVal e As System.EventArgs)
        ' cargo nuevamente el tipo de vuelo segun la empresa
        tbTipo = vMaestrosBL.Get_TipoVuelo(UcViaje1.cboCiaAviacion.EditValue)
        UcViaje1.cboTipoVuelo.Properties.DataSource = tbTipo
    End Sub

    Private Sub cmdclickTipoVuelo(ByVal sender As Object, ByVal e As System.EventArgs)
        UcViaje1.txtNroCupos.Text = vProViaBL.CargarTipoVueloCupos(UcViaje1.cboTipoVuelo.EditValue)
        UcViaje1.txtNroCupos.Refresh()
    End Sub

    Private Sub CrearCodigo(ByVal sender As Object, ByVal e As System.EventArgs)
        If UcViaje1.txtCodViaje.Text.Trim = "" Then
            ' Asigno el correlativo segun el contratante
            UcViaje1.txtCodViaje.Text = vProViaBL.NuevoCorrelativo(Microsoft.VisualBasic.Left(UcViaje1.cboOrigen.Text, 1))
        End If
    End Sub

#End Region

#Region "Actualizacion de datos"

    Private Sub RegistroNuevo()
        InicializarBoton(True)
        EstadoCajas(False)
        LimpiarCajas()
        UcViaje1.cboContratante.Properties.ReadOnly = False
        UcViaje1.cboOrigen.Properties.ReadOnly = False
        UcViaje1.txtCodViaje.Visible = False
        SLTitulo.Text = "Mantenimiento de Vuelos (AGREGAR)"
        UcViaje1.cboContratante.Focus()
        nopc = 1
    End Sub

    Private Sub RegistroModificar()
        InicializarBoton(True)
        EstadoCajas(False)
        UcViaje1.cboContratante.Properties.ReadOnly = True
        UcViaje1.cboOrigen.Properties.ReadOnly = True
        UcViaje1.txtCodViaje.Visible = True
        SLTitulo.Text = "Mantenimiento de Vuelos (MODIFICAR)"
        UcViaje1.cboCiaAviacion.Focus()
        nopc = 2
    End Sub

    Private Sub RegistroDardeBaja()
        If UcViaje1.cboEstado.EditValue = "2" Then
            MsgBox("El vuelo está cerrado...", MsgBoxStyle.Exclamation, "Eliminación prohibida")
        Else
            If MsgBox("¿Está seguro de eliminar el vuelo?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Desición") = MsgBoxResult.Yes Then
                Dim lFlgOka As Boolean
                lFlgOka = vProViaBL.EliminarProgramaViaje(UcViaje1.txtCodViaje.Text)
                If lFlgOka = True Then
                    MsgBox("La eliminación del vuelo se realizó con éxito...", MsgBoxStyle.Information, "Proceso éxitoso")
                Else
                    MsgBox("Ha ocurrido un error...", MsgBoxStyle.Critical, "Proceso con problemas")
                End If
                CargarLista()
            End If
        End If
    End Sub

    Private Sub RegistroGrabar()
        If UcViaje1.DxValidationProvider1.Validate Then
            Dim sOrigen As String = Strings.Left(UcViaje1.cboOrigen.EditValue, 3)
            Dim sDestino As String = Strings.Right(UcViaje1.cboOrigen.EditValue, 3)
            vProViaBE.CodContrataViaje = UcViaje1.cboContratante.EditValue
            vProViaBE.CodViaje = UcViaje1.txtCodViaje.Text
            vProViaBE.FchViaje = UcViaje1.cboFchViaje.Text
            vProViaBE.CodLugarOrigen = sOrigen
            vProViaBE.CodLugarDestino = sDestino
            vProViaBE.CodEmpresa = UcViaje1.cboCiaAviacion.EditValue
            vProViaBE.NroCupos = UcViaje1.txtNroCupos.Text
            vProViaBE.PsoMaxViaje = UcViaje1.txtPsoMaxViaje.Text
            vProViaBE.ObsViaje = UcViaje1.txtObservacion.Text
            vProViaBE.EstadoViaje = UcViaje1.cboEstado.EditValue
            vProViaBE.CodTipoVuelo = UcViaje1.cboTipoVuelo.EditValue
            Dim lFlgOka As Boolean
            Select Case nopc
                Case 1
                    lFlgOka = vProViaBL.CrearProgramaViaje(vProViaBE)
                Case 2
                    lFlgOka = vProViaBL.ModificarProgramaViaje(vProViaBE)
            End Select
            If lFlgOka = True Then
                MsgBox("La actualización del vuelo se realizó con éxito...", MsgBoxStyle.Information, "Proceso éxitoso")
                SLTitulo.Text = "Mantenimiento de Vuelos"
            Else
                MsgBox("Ha ocurrido un error...", MsgBoxStyle.Critical, "Proceso con problemas")
            End If
            InicializarBoton(False)
            EstadoCajas(True)
            CargarLista()
        Else
            UcViaje1.cboOrigen.Focus()
        End If
    End Sub

    Private Sub RegistroCancelar()
        CambioRegistro()
        InicializarBoton(False)
        EstadoCajas(True)
        SLTitulo.Text = "Mantenimiento de Vuelos"
        UcViaje1.DxValidationProvider1.Validate()
    End Sub
#End Region

End Class